Giữa Su, Sudo Su, Sudo -s và Sudo -i có điểm gì khác nhau?
Lệnh su
Lệnh su thay thế người dùng hiện tại thành root trong shell hiện tại.
Bạn có thể chuyển sang bất kỳ người dùng nào bằng cách nhập su và thêm tên người dùng sau nó.
Lệnh này sẽ yêu cầu hệ thống chuyển (và về cơ bản là đăng xuất) người dùng hiện tại sang người được chỉ định. Ngoài ra, lệnh su có thể có được quyền truy cập root bằng cách nhập su mà không chỉ định bất kỳ điều gì sau lệnh.
su được sử dụng tốt nhất khi người dùng muốn truy cập trực tiếp vào tài khoản root trên hệ thống. Nó không đi qua sudo hay bất cứ điều gì tương tự. Thay vào đó, bạn được yêu cầu nhập mật khẩu của người dùng root vì bạn đang đăng nhập vào nó theo đúng nghĩa đen. Hơn nữa, các cách khác để đạt được quyền truy cập root không có lợi ích bằng việc truy cập vào thư mục root chính và môi trường root.
Cảnh báo: Sử dụng su là cách kém an toàn nhất để thực hiện hành động root. Nói chung, nếu bạn có thể tránh, đừng sử dụng tùy chọn này.
Lệnh su -c
Lệnh này chuyển trực tiếp các lệnh khác tới người dùng root.
Tương tự như gõ sudo trước một lệnh, su -c sẽ chạy một lệnh với tư cách là người dùng root. Tuy nhiên, thay vì chỉ cần gõ lệnh, bạn sẽ phải đặt nó trong dấu ngoặc kép.
Đây là một cách nhanh chóng để bắn một lệnh thông qua terminal với các đặc quyền admin. Nó rất hữu ích nếu sudo bằng cách nào đó không khả dụng (nó không được cài đặt sẵn trong các bản phân phối như Arch Linux) hoặc không hoạt động chính xác vì bị hỏng.
Vì bạn đang chuyển trực tiếp nội dung nào đó tới root, nếu mật khẩu người dùng và mật khẩu root của bạn khác nhau, bạn sẽ phải nhập mật khẩu root của mình để xác thực.
Lệnh sudo su
Lệnh này yêu cầu mật khẩu của người dùng hiện tại thay vì root.
Về cơ bản, nó giống như chỉ chạy su trong shell, một sự khác biệt quan trọng. Thay vì yêu cầu hệ thống trực tiếp "chuyển đổi người dùng", bạn đang yêu cầu hệ thống chạy lệnh su với các đặc quyền của superuser. Khi chạy sudo su, “.profile”, “.bashrc” và “/etc/profile” sẽ được bắt đầu, giống như chạy su (hoặc su root). Nếu bất kỳ lệnh nào được chạy với sudo trước nó, nó sẽ được cấp quyền root.
Mặc dù không có sự khác biệt lớn giữa sudo su và su, nhưng lệnh sudo su vẫn là lệnh rất hữu ích vì một lý do quan trọng - khi người dùng đang chạy su để có được quyền truy cập root trên hệ thống, họ phải biết mật khẩu root. Quyền root được cung cấp với sudo su bằng cách yêu cầu mật khẩu của người dùng hiện tại. Điều này giúp bạn có thể lấy được quyền root mà không cần mật khẩu root.
Điều này hữu ích trong các trường hợp mà bạn có thể đã quên mật khẩu root, nếu mật khẩu đó khác với mật khẩu cho tài khoản người dùng của bạn. Mặc dù bạn có thể làm điều này trong thời gian chờ đợi, bạn vẫn nên reset mật khẩu root tại một số điểm.
Lệnh sudo -i
Sử dụng sudo -i hầu như giống với lệnh sudo su với một ngoại lệ: Nó không tương tác trực tiếp với người dùng root.
Giống như sudo su, flag -i cho phép người dùng có được môi trường root mà không cần biết mật khẩu của tài khoản root. sudo -i cũng rất giống với việc sử dụng sudo su - nó sẽ đọc tất cả các file môi trường (“.profile”, v.v…) và đặt môi trường bên trong shell.
Nó khác với sudo su ở chỗ sudo -i là cách tốt hơn nhiều để lấy quyền root và môi trường root mà không cần tương tác trực tiếp với người dùng root.
Để làm rõ - với sudo su, bạn đang sử dụng nhiều lệnh root setuid trong nền. Điều này làm cho việc tìm ra những biến môi trường nào sẽ được giữ lại và những biến số nào sẽ bị thay đổi (khi hoán đổi sang môi trường root) trở nên khó khăn hơn nhiều. Điều này không đúng với sudo -i. Bởi vì điều này, hầu hết mọi người xem nó như là phương pháp ưa thích để có được quyền root mà không cần đăng nhập trực tiếp.
Nói một cách đơn giản hơn, sudo -i sẽ cung cấp cho bạn thông tin đăng nhập root “sạch” trong thư mục “/root”, đây là thư mục “home” cho người dùng root.
Lệnh sudo -s
Lệnh này triệu hồi một shell với biến $SHELL.
Switch -s cho lệnh sudo đọc biến $SHELL của người dùng hiện tại đang thực thi các lệnh. Lệnh này hoạt động như thể người dùng đang chạy sudo /bin/bash, nếu shell mà người dùng đến là bash.
Trong trường hợp ví dụ, sudo -s đã cung cấp shell tương tác fish vì trước đó ta đã cài đặt fish làm shell mặc định của mình, vì vậy nó sẽ giống như thể ta chạy sudo /usr/bin/fish.
Sudo -s là một shell kiểu "không đăng nhập". Không giống như một lệnh như sudo -i hoặc sudo su, hệ thống sẽ không đọc bất kỳ file môi trường nào. Khi người dùng yêu cầu shell chạy sudo -s, nó sẽ có quyền root nhưng sẽ không thay đổi môi trường người dùng. Home của bạn sẽ không phải là root home, v.v…
Lệnh này được sử dụng tốt nhất khi người dùng muốn chuyển sang root nhưng vẫn giữ nguyên môi trường shell. Ví dụ, bạn có thể muốn chạy một script fish và không bị buộc gắn bó với bash shell mặc định mà root thường có trong hầu hết các bản phân phối.
Các lệnh khác được đề cập ở trên có quyền truy cập root, nhưng cũng sẽ cung cấp cho bạn các biến shell và môi trường mà bản phân phối có quyền root. Có thể bạn chỉ muốn chuyển đổi người dùng mà không cần tất cả những thứ đó!
Giữa Su, Sudo Su, Sudo -s và Sudo -i có điểm gì khác nhau?
Mọi người cùng tìm kiếm: sudo su, sudo su -, "sudo -i" vs "sudo -s", su root, sudo - su, sudo su-, "sudo -i" in linux, "sudo -i", sudo - i, "sudo su -", $sudo